/**
 * 验证身份证号码的合法性
 *
 * @param rule 验证规则对象，用于定义验证的规则和条件
 * @param value 待验证的身份证号码字符串
 * @param callback 回调函数，用于在验证完成后返回验证结果
 */
function validIdCard(rule: object, value: string, callback: (error?: Error) => void): void {
  if (
    !/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/.test(
      value
    )
  ) {
    callback(new Error("身份证号码格式不正确"));
  } else {
    callback();
  }
}

/**
 * 验证手机号码的合法性
 *
 * @param rule 验证规则对象，用于定义验证的规则和条件
 * @param value 待验证的手机号码字符串
 * @param callback 回调函数，用于在验证完成后返回验证结果
 */
function validPhone(rule: object, value: string, callback: (error?: Error) => void): void {
  if (!/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value)) {
    callback(new Error("手机号码格式不正确"));
  } else {
    callback();
  }
}

/**
 * @description 验证金额的合法性
 *
 * @param rule 验证规则对象，用于定义验证的规则和条件
 * @param value 待验证的金额字符串
 * @param callback 回调函数，用于在验证完成后返回验证结果
 */
function validAmount(rule: object, value: string, callback: (error?: Error) => void): void {
  if (!/^\d+(\.\d{1,2})?$/.test(value)) {
    callback(new Error("金额格式不正确"));
  } else {
    callback();
  }
}

export { validIdCard, validPhone, validAmount };
